<html>
<head>
<script>

function print(message, color) {
    var paragraph = document.createElement("p");
    if (color)
        paragraph.style.color = color;
    paragraph.appendChild(document.createTextNode(message));
    document.getElementById("console").appendChild(paragraph);
}

function printPrototypes(e)
{
    var a = new Array();
    for (p = e.__proto__; p != null; p = p.__proto__) {
        a.push(p);
    }

    print("----- " + e + " (" + a.length + " prototypes) -----", "blue");
    // Print back-to-front so the root of the chain comes out on top
    for (var i = a.length - 1; i >= 0; i--) { /* > */
        print(a[i]);
    }
}

function test()
{
    if (window.testRunner)
        testRunner.dumpAsText();

    var e;

    e = document;
    printPrototypes(e);

    e = document.getElementById("div");
    printPrototypes(e);

    e = document.createElement("form");
    printPrototypes(e);

    e = document.createEvent("UIEvents");
    printPrototypes(e);

    e = document.createEvent("MouseEvents");
    printPrototypes(e);

    e = document.createEvent("KeyboardEvents");
    printPrototypes(e);
}

</script>
</head>
<body onload="test()">
<p>This page prints out the prototype chains of select DOM objects. Older versions of WebCore didn't properly implement prototype chaining for these objects.</p>
<p>NOTE: This test will start failing if you change the layout of a related prototype chain in WebCore.
That does not necessarily mean that you have done something wrong; you may just need to check in new
results.</p>
<hr>
<div id="console"></div>
<div id="div"></div>
</body>
</html>
